<?php
defined('FRAMEWORK_PATH') or exit();

function C($name = null, $val = null)
{
    static $_config = array();
    if (empty($name)) {
        return $_config;
    } elseif (is_string($name)) {
        if (empty($val)) {
            if (!strpos($name, '=>')) {
                //一维
                return isset($_config[$name]) ? $_config[$name] : null;
            } else {
                //目前只支持二维
                $name = explode('=>', $name);
                return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null;
            }
        } else {
            if (!strpos($name, '=>')) {
                //直接设置
                $_config[$name] = $val;
            } else {
                //设置二维
                $name = explode('=>', $name);
                $_config[$name[0]][$name[1]] = $val;
            }
        }
    } elseif (is_array($name)) {
        foreach ($name as $key => $value) {
            $_config[$key] = $value;
        }
        return;
    } else {
        throw new Exception('参数类型出错');
        return;
    }
}

/**
 * 导入类文件，同Java
 * 那么次import导入的文件就是:您自己定义的路径下面的Path.class.php
 * @param string $class 类库名
 * @param string $ext 导入的文件扩展名,Tp框架类不受这个参数影响
 * @return mixed
 */

function import($class, $ext = '.class.php')
{
    //$pos = strpos($class, '.');
    $name = str_replace(array('.', '#'), array('/', '.'), $class);
    /*$whosePackage = substr($class, 0, $pos);
    $name = substr($name, $pos);
    if ('S' === $whosePackage) {
        //导入Toper框架类
        $baseUrl = FRAMEWORK_PATH;
    } elseif ('U' === $whosePackage) {
        //导入用户类
        $baseUrl = MODULES_PATH;
    } else {
        $baseUrlConstants = strtoupper($whosePackage) . '_IMPORT_BASEURL';
        if (defined($baseUrlConstants)) {
            $baseUrl = constant($baseUrlConstants);
        } else {
            echo '<br/><font color = "red">导入失败，[ERROR]您没有定义常量', $baseUrlConstants, '</font>';
            return false;
        }
    }*/
    $classFile = MODULES_PATH . $name . $ext;
    if (is_file($classFile)) {
        //类
        return tp_include($classFile);
    } elseif (is_file(MODULES_PATH . $name . '.interface.php')) {
        //接口
        return tp_include(MODULES_PATH . $name . '.interface.php');
    } else {
        //不正常的文件
        echo '<br/><font color = "red">[ERROR]导入文件', $classFile, '失败</font>';
        return false;
    }
}

/**
 * 自定义导入函数,调用此函数时请一定要使用绝对路径
 * 支持tp_include(dirname(__FILE__).'/test.class.php')
 * 本框架本来有两种方法来定义tp_include()
 * 方法1:用class_exists()来判定
 * 方法2:定义方法类的static变量来存储导入的类文件的路径
 * 方法1我决定弃用，因为在import中允许自定义，那么使用class_exists()就有局限性了
 * @param string $url 文件路径
 * @return mixed
 */
function tp_include($url = null)
{
    static $_config = array();
    if (!isset($_config[$url])) {
        $_config[$url] = '';
        return require $url;
    } else {
        return false;
    }
}

/**
 * 优化的require_once
 * @param string $filename 文件地址
 * @return boolean
 */
function require_cache($filename) {
    static $_importFiles = array();
    if (!isset($_importFiles[$filename])) {
        if (file_exists_case($filename)) {
            require $filename;
            $_importFiles[$filename] = true;
        } else {
            $_importFiles[$filename] = false;
        }
    }
    return $_importFiles[$filename];
}

/**
 * 批量导入文件 成功则返回
 * @param array $array 文件数组
 * @param boolean $return 加载成功后是否返回
 * @return boolean
 */
function require_array($array,$return=false){
    foreach ($array as $file){
        if (require_cache($file) && $return) return true;
    }
    if($return) return false;
}

/**
 * 区分大小写的文件存在判断
 * @param string $filename 文件地址
 * @return boolean
 */
function file_exists_case($filename) {
    if (is_file($filename)) {
        if (IS_WIN && C('APP_FILE_CASE')) {
            if (basename(realpath($filename)) != basename($filename))
                return false;
        }
        return true;
    }
    return false;
}

function message($title,$message,$url = ''){

    echo "<script language='javascript'>
			alert(\"$message\");";
    if($url)
		echo "document.location=\"$url\";";

	echo "</script>";

    exit();
}